from app.extensions import mail # 从app文件夹里extensions.py中导入mail对象
from flask import current_app,render_template
from flask_mail import Message
from threading import Thread


def async_send(app,message): # 异步发送邮件，是笔记里发送方法三
    with app.app_context(): # 新线程里无配置信息，需要先创建程序上下文，才能发送邮件
        mail.send(message)


def send_mail2(subject,recipients,template,**kwargs): # 异步发送邮件，是笔记里发送方法三
    app=current_app._get_current_object() # 若该函数不在manage.py中，需从代理对象current_app中获取原始对象。async_send()中的程序上下文必须从原始对象里获取，里面包含配置信息
    message=Message(subject=subject,recipients=[recipients],sender=app.config['MAIL_USERNAME'])
    message.html=render_template('mail/'+template+'.html',**kwargs)
    message.body=render_template('mail/'+template+'.txt',**kwargs)
    thread=Thread(target=async_send,args=[app,message]) # 让新线程发送邮件，当前页面立即加载完毕，网络不好时无需等待加载，但邮件的实际发送情况需等待线程完成
    thread.start()